home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / snip9503 / dow.c < prev    next >
C/C++ Source or Header  |  1995-03-14  |  1KB  |  61 lines

  1. /*
  2. **  DOW.C
  3. **
  4. **  Public domain by VinhHao Nguyen, 03/94
  5. */
  6.  
  7. #ifdef ISO      /* monday == 0 */
  8.  #define ADJ 5
  9. #else           /* sunday == 0 */
  10.  #define ADJ 6
  11. #endif
  12.  
  13. unsigned dow(unsigned y, unsigned m, unsigned d)
  14. {
  15.       if (m < 3)
  16.       {
  17.             m += 13;
  18.             y--;
  19.       }
  20.       else  m++;
  21.       return (d + 26 * m / 10 + y + y / 4 - y / 100 + y / 400 + ADJ) % 7;
  22. }
  23.  
  24. #ifdef TEST
  25.  
  26. #include <stdio.h>
  27.  
  28. main(int argc, char *argv[])
  29. {
  30.       void usage(void);
  31.       unsigned d, m, y, days[] = {31, 29, 31, 30, 31, 30,
  32.                                   31, 31, 30, 31, 30, 31};
  33.       char *day[]   = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun",};
  34.       char *month[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
  35.                        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",};
  36.       
  37.  
  38.       if (4 > argc)
  39.             usage();
  40.       y = atoi(argv[1]);
  41.       m = atoi(argv[2]);
  42.       d = atoi(argv[3]);
  43.       if (!m || m > 12)
  44.             usage();
  45.       if (!d || d > days[m - 1])
  46.             usage();
  47.       if (y < 100)
  48.             y += 1900;
  49.       printf("%d %s %d is a %s\n", d, month[m - 1], y,
  50.             day[dow(y, m, d) - 1]);
  51.       return 0;
  52. }
  53.  
  54. void usage(void)
  55. {
  56.       puts("Usage: DOW yy[yy] mm dd");
  57.       exit(-1);
  58. }
  59.  
  60. #endif
  61.